#include "compile_run.hpp"
#include "../comm/httplib.h"


using namespace ns_compile_run;
using namespace httplib;

// int main()
// {
//     Server svr;
//     svr.Get("/hello", [](const Request &req, Response &resp){
//         resp.set_content("hello httplib, 你好httplib", "text/plain; charset=utf-8");
//     });

//     svr.listen("0.0.0.0", 8888);

//     return 0;
// }

int main(int argc, char *argv[])
{
    if(argc != 2)
    {
        std::cout << argv[0] << " port" << std::endl;
        return 1; 
    }

    Server svr;
    svr.Post("/compile_and_run", [](const Request &req, Response &resp){
        //
        //std::cout << "in_json: " << req.body << std::endl;

        std::string in_json = req.body;
        std::string out_json;
        if(!in_json.empty())
        {
            CompileAndRun::Start(in_json, &out_json);
            resp.set_content(out_json, "application/json;charset=utf-8");
        }
    });


    svr.listen("0.0.0.0", atoi(argv[1]));

    //in_json：{"code": "#include...", "input": "", "cpu_limit": 1, "mem_limit": 10240}
    //out_json: {"status":"0", "reason":"", "stdout":"", "stderr":""}

    // std::string in_json;
    // Json::Value in_value;
    // in_value["code"] = R"(#include <iostream>
    // int main()
    // {
    //     std::cout << "hello" << std::endl;
    //     return 0;
    // })";


    // in_value["code"] = R"(#include <iostream>
    // int main()
    // {
    //     while(1)
    //     abcdefg
    //     return 0;
    // })";


    // in_value["input"] = "";
    // in_value["cpu_limit"] = 1;
    // in_value["mem_limit"] = 10240 * 5;
    // in_value["emitUTF8"]=true;
    // Json::FastWriter writer;
    // Json::StreamWriterBuilder wb;
    // wb.setDefaults(&in_value);
    // in_json = writer.write(in_value);
    // //std::cout << in_json << std::endl;

    // std::string out_json;
    // CompileAndRun::Start(in_json, &out_json);

    // std::cout << out_json << std::endl

    // Json::Value value;
    // Json::StreamWriterBuilder wb;
    // value["emitUTF8"]=true;
    // wb.setDefaults(&value);
    // value["key"]="中国";
    // Json::StreamWriter* sw(wb.newStreamWriter());
    // std::stringstream ss;
    // sw->write(value,&ss);
    // std::string s=ss.str();
    // std::cout<<s<<std::endl;
    // std::cout<<value["key"].asString()<<std::endl;

    return 0;
}
